package blueBridge;

public class Main2 {
    //30528
    public static void main(String[] args) {
        int[][] op = new int[4][4];
        long res=0;

        for(op[0][0] = 0;op[0][0]<3;op[0][0]++){
            for(op[0][1]=0;op[0][1]<3;op[0][1]++){
                for(op[0][2]=0;op[0][2]<3;op[0][2]++){
                    for(op[0][3]=0;op[0][3]<3;op[0][3]++){

                        for(op[1][0]=0;op[1][0]<3;op[1][0]++){
                            for(op[1][1]=0;op[1][1]<3;op[1][1]++){
                                for(op[1][2]=0;op[1][2]<3;op[1][2]++){

                                    for(op[2][0]=0;op[2][0]<3;op[2][0]++){
                                        for(op[2][1]=0;op[2][1]<3;op[2][1]++){

                                            for(op[3][0]=0;op[3][0]<3;op[3][0]++){
                                                if(check(op)) res++;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

        System.out.println(res);
    }

    public static boolean check(int[][] op){
        int[][] mat = new int[5][5];
        mat[0][0] = 1;
        mat[0][2] = 1;
        mat[0][4] = 1;
        //用第一层的数据按照op计算，看看结果是否等于1，0-与 1-或 2-异或
        for(int i = 0;i<4;i++){
            if(op[0][i] == 0){
                mat[1][i] = and(mat[0][i],mat[0][i+1]);
            } else if (op[0][i] == 1) {
                mat[1][i] = or(mat[0][i],mat[0][i+1]);
            }else if (op[0][i] == 2) {
                mat[1][i] = xor(mat[0][i],mat[0][i+1]);
            }
        }

        for(int i = 0;i<3;i++){
            if(op[1][i] == 0){
                mat[2][i] = and(mat[1][i],mat[1][i+1]);
            } else if (op[1][i] == 1) {
                mat[2][i] = or(mat[1][i],mat[1][i+1]);
            }else if (op[1][i] == 2) {
                mat[2][i] = xor(mat[1][i],mat[1][i+1]);
            }
        }

        for(int i = 0;i<2;i++){
            if(op[2][i] == 0){
                mat[3][i] = and(mat[2][i],mat[2][i+1]);
            } else if (op[2][i] == 1) {
                mat[3][i] = or(mat[2][i],mat[2][i+1]);
            }else if (op[2][i] == 2) {
                mat[3][i] = xor(mat[2][i],mat[2][i+1]);
            }
        }

        if(op[3][0] == 0){
            mat[4][0] = and(mat[3][0],mat[3][1]);
        }
        if(op[3][0] == 1){
            mat[4][0] = or(mat[3][0],mat[3][1]);
        }
        if(op[3][0] == 2){
            mat[4][0] = xor(mat[3][0],mat[3][1]);
        }

        if(mat[4][0] == 1) return true;
        return false;
    }

    public static int and(int a,int b){
        if(a == 1&&b==1) return 1;
        return 0;
    }
    public static int or(int a,int b){
        if(a == 0&&b==0) return 0;
        return 1;
    }
    public static int xor(int a,int b){
        if(a!=b) return 1;
        return 0;
    }
}
